package com.atguigu.yygh.common.result;

import org.apache.poi.ss.formula.functions.T;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/** 
* 全局统一返回结果类
*/
@Data
@ApiModel(value = "全局统一返回结果类")
public class Result<T> {

	@ApiModelProperty(value = "返回码")
	private Integer code;
	
	@ApiModelProperty(value = "返回消息")
	private String message;
	
	@ApiModelProperty(value = "返回数据")
	private T data;
	
	public Result(){}
	
	public static<T> Result<T> build(T data){
		Result<T> result = new 	Result<>();
		if(data != null){
			result.setData(data);
		}
		return result;
	}
	
	public static<T> Result<T> build(T body,ResultCodeEnum resultCodeEnum){
		Result<T> result = build(body);
		result.setCode(resultCodeEnum.getCode());
		result.setMessage(resultCodeEnum.getMessage());
		return result;
	}
	
	public static<T> Result<T> build(Integer code,String message){
		Result<T> result = build(null);
		result.setCode(code);
		result.setMessage(message);
		return result;
	}
	
	public static<T> Result<T> ok(){
		return Result.ok(null);
	}
	/**
	 * 操作成功
	 * @param data
	 * @return
	 */
	public static<T> Result<T> ok(T data){
		Result<T> result = build(data);
		return build(data,ResultCodeEnum.SUCCESS);
	}
	
	public static<T> Result<T> fail(){
		return Result.fail(null);
	}
	/**
	 * 操作失败
	 * @param data
	 * @return
	 */
	public static<T> Result<T> fail(T data){
		Result<T> result = build(data);
		return build(data,ResultCodeEnum.FAIL);
	}
	
	public Result<T> message(String message){
		this.message = message;
		return this;
	}
	
	public Result<T> code(Integer code){
		this.code = code;
		return this;
	}
	
	public boolean isOk(){
		if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()){
			return true;
		}else{
			return false;
		}
	}
	
}
